package com.berchen.test;

/**
 * 死锁
 */
public class SiSuo extends Thread{
    private String str1;
    private String str2;

    public SiSuo(String str1, String str2) {
        this.str1 = str1;
        this.str2 = str2;
    }

    public static void main(String[] args) {

        String str1="lock1";
        String str2="lock2";
        // 创建两个线程 分别竞争两个锁
        new SiSuo(str1,str2).start(); // 线程1  获取到lock1锁 同时睡眠了
        new SiSuo(str2,str1).start();   // 线程2  获取到lock2锁  但是想要获取lock1锁 但是这时候lock1是被线程1拿到的 所以就等待
    }

    @Override
    public void run() {

        synchronized (str1){
            // 占有str1 尝试占有str2
            System.out.println(Thread.currentThread().getName()+":"+str2);
            synchronized (str2){
                System.out.println(Thread.currentThread().getName()+":"+str1);
            }
        }
    }
}
